//package com.ow.dva.util.pay.alipay;
//
//import com.alipay.api.AlipayClient;
//import com.alipay.api.AlipayResponse;
//import com.alipay.api.DefaultAlipayClient;
//import com.alipay.api.request.AlipayTradeAppPayRequest;
//import com.alipay.api.request.AlipayTradeWapPayRequest;
//import com.alipay.api.response.AlipayTradePrecreateResponse;
//import com.alipay.api.response.AlipayTradeWapPayResponse;
//import com.alipay.demo.trade.config.Configs;
//import com.alipay.demo.trade.model.builder.AlipayTradePrecreateRequestBuilder;
//import com.alipay.demo.trade.model.result.AlipayF2FPrecreateResult;
//import com.alipay.demo.trade.service.AlipayMonitorService;
//import com.alipay.demo.trade.service.AlipayTradeService;
//import com.alipay.demo.trade.service.impl.AlipayMonitorServiceImpl;
//import com.alipay.demo.trade.service.impl.AlipayTradeServiceImpl;
//import com.alipay.demo.trade.service.impl.AlipayTradeWithHBServiceImpl;
//import com.alipay.demo.trade.utils.ZxingUtils;
//import com.jee.ssm.common.config.Logger;
//import com.jee.ssm.common.utils.PropertiesLoader;
//import com.jee.ssm.model.Order;
//
//import javax.servlet.http.HttpServletRequest;
//import java.io.File;
//import java.io.UnsupportedEncodingException;
//import java.net.URLEncoder;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.Map;
//
////返回二维码
//
//public class TradePrecreate {
//    // 支付宝当面付2.0服务
//    private static AlipayTradeService tradeService;
//    // 支付宝当面付2.0服务（集成了交易保障接口逻辑）
//    private static AlipayTradeService   tradeWithHBService;
//
//    // 支付宝交易保障接口服务，供测试接口api使用，请先阅读readme.txt
//    private static AlipayMonitorService monitorService;
//
//
//    static {
//        /** 一定要在创建AlipayTradeService之前调用Configs.init()设置默认参数
//         *  Configs会读取classpath下的zfbinfo.properties文件配置信息，如果找不到该文件则确认该文件是否在classpath目录
//         */
//        Configs.init("zfbinfo.properties");
//
//        /** 使用Configs提供的默认参数
//         *  AlipayTradeService可以使用单例或者为静态成员对象，不需要反复new
//         */
//        tradeService = new AlipayTradeServiceImpl.ClientBuilder().build();
//
//        // 支付宝当面付2.0服务（集成了交易保障接口逻辑）
//        tradeWithHBService = new AlipayTradeWithHBServiceImpl.ClientBuilder().build();
//
//        /** 如果需要在程序中覆盖Configs提供的默认参数, 可以使用ClientBuilder类的setXXX方法修改默认参数 否则使用代码中的默认设置 */
//        monitorService = new AlipayMonitorServiceImpl.ClientBuilder()
//                .setGatewayUrl("http://mcloudmonitor.com/gateway.do").setCharset("GBK")
//                .setFormat("json").build();
//    }
//
//
//    /**
//     * 支付宝支付
//     * @param orderCode
//     * @param parkName
//     * @param amount
//     * @param request
//     * @return
//     */
//    public static String aliPay(String orderCode, String parkName, Double amount, HttpServletRequest request) {
//        String money=String.valueOf(amount);
//        String filePath = "/images/orderImage/aliPay/"+ orderCode+".jpg";
//        String realPath = request.getSession().getServletContext().getRealPath(filePath);
//        File file=new File(realPath);
//        if(!file.exists()){
//            file.mkdirs();
//        }
//
//        // (必填) 商户网站订单系统中唯一订单号，64个字符以内，只能包含字母、数字、下划线，
//        // 需保证商户系统端不能重复，建议通过数据库sequence生成，
//        long dateTime = new Date().getTime();//保证订单号的唯一性
//        String outTradeNo = orderCode+"_"+dateTime;
//
//        // (必填) 订单标题，粗略描述用户的支付目的。如“xxx品牌xxx门店当面付扫码消费”
//        String subject = parkName+"停车收费"+money+"元";
//
//        // (必填) 订单总金额，单位为元，不能超过1亿元
//        // 如果同时传入了【打折金额】,【不可打折金额】,【订单总金额】三者,则必须满足如下条件:【订单总金额】=【打折金额】+【不可打折金额】
//        String totalAmount = "0.01";
////        String totalAmount = amount;
//
//        // (可选) 订单不可打折金额，可以配合商家平台配置折扣活动，如果酒水不参与打折，则将对应金额填写至此字段
//        // 如果该值未传入,但传入了【订单总金额】,【打折金额】,则该值默认为【订单总金额】-【打折金额】
//        String undiscountableAmount = "0";
//
//        // 卖家支付宝账号ID，用于支持一个签约账号下支持打款到不同的收款账156+-+号，(打款到sellerId对应的支付宝账号)
//        // 如果该字段为空，则默认为与支付宝签约的商户的PID，也就是appid对应的PID
//        String sellerId = "";
//        // 订单描述，可以对交易或商品进行一个详细地描述，比如填写"购买商品2件共15.00元"
//        String body = "本次停车共"+money+"元";
//        // 商户操作员编号，添加此参数可以为商户操作员做销售统计
////        String operatorId = "test_operator_id";
//
////         (必填) 商户门店编号，通过门店号和商家后台可以配置精准到门店的折扣信息，详询支付宝技术支持
//        String storeId = "test_store_id";
//
//        // 业务扩展参数，目前可添加由支付宝分配的系统商编号(通过setSysServiceProviderId方法)，详情请咨询支付宝技术支持
////        ExtendParams extendParams = new ExtendParams();
////        extendParams.setSysServiceProviderId("2088100200300400500");
//
//        // 支付超时，定义为120分钟
//        String timeoutExpress = "120m";
//        // 商品明细列表，需填写购买商品详细信息，
////        List<GoodsDetail> goodsDetailList = new ArrayList<GoodsDetail>();
////        // 创建一个商品信息，参数含义分别为商品id（使用国标）、名称、单价（单位为分）、数量，如果需要添加商品类别，详见GoodsDetail
////        GoodsDetail goods1 = GoodsDetail.newInstance("goods_id001", "xxx小面包", 1000, 1);
////        // 创建好一个商品后添加至商品明细列表
////        goodsDetailList.add(goods1);
////
////        // 继续创建并添加第一条商品信息，用户购买的产品为“黑人牙刷”，单价为5.00元，购买了两件
////        GoodsDetail goods2 = GoodsDetail.newInstance("goods_id002", "xxx牙刷", 500, 2);
////        goodsDetailList.add(goods2);
//
//        // 创建扫码支付请求builder，设置请求参数
//        AlipayTradePrecreateRequestBuilder builder = new AlipayTradePrecreateRequestBuilder()
//                .setSubject(subject)
//                .setTotalAmount(totalAmount)
//                .setOutTradeNo(outTradeNo)
//                .setUndiscountableAmount(undiscountableAmount).setSellerId(sellerId).setBody(body)
////                .setOperatorId(operatorId)
//                .setStoreId(storeId)
////                .setExtendParams(extendParams)
//                .setTimeoutExpress(timeoutExpress);
////                .setNotifyUrl(AliPayConfig.pos_notify);//支付宝服务器主动通知商户服务器里指定的页面http路径,根据需要设置
////                .setGoodsDetailList(goodsDetailList);
//
//        AlipayF2FPrecreateResult result = tradeService.tradePrecreate(builder);
//        switch (result.getTradeStatus()) {
//            case SUCCESS:
//                Logger.info("支付宝预下单成功: )");
//                AlipayTradePrecreateResponse response = result.getResponse();
//                dumpResponse(response);
//                // 需要修改为运行机器上的路
//                Logger.info("filePath:" + realPath);
//                ZxingUtils.getQRCodeImge(response.getQrCode(), 128, realPath);
//                break;
//
//            case FAILED:
//                Logger.error("支付宝预下单失败!!!");
//                break;
//
//            case UNKNOWN:
//                Logger.error("系统异常，预下单状态未知!!!");
//                break;
//            default:
//                Logger.error("不支持的交易状态，交易返回异常!!!");
//                break;
//        }
//        return filePath;
//    }
//
//    private static void dumpResponse(AlipayResponse response) {
//        if (response != null) {
//            Logger.info(String.format("code:%s, msg:%s", response.getCode(), response.getMsg()));
//            if (response.getSubCode()!=null && "".equals(response.getSubCode())) {
//                Logger.info(String.format("subCode:%s, subMsg:%s", response.getSubCode(),
//                        response.getSubMsg()));
//            }
//            Logger.info("body:" + response.getBody());
//        }
//    }
//
////--------这是一条分割线。上面是当面付。下面是app支付-----------------------------------------------------------------------
//
//
//    /**
//     * @Description: 初始化支付宝客户端
//     */
//    public static AlipayClient initAlipay(){
//        //获得初始化的AlipayClient
//        AlipayClient alipayClient = new DefaultAlipayClient(AliPayConfig.gatewayUrl, AliPayConfig.app_id, AliPayConfig.merchant_private_key, "json", "utf-8", AliPayConfig.alipay_public_key, AliPayConfig.sign_type);
//        return alipayClient;
//    }
//
//
//
//
//
//    public static String alipayForZfb(Order order) throws UnsupportedEncodingException{
//        PropertiesLoader propertiesLoader = new PropertiesLoader("zfbinfo.properties");
//
//        double payMoney = 0.00;
//        String notify_all_url = propertiesLoader.getProperty("notify_all_url");
//        Map<String,String> map = new HashMap<>();
//        AlipayClient alipayClient = initAlipay();
//
//        long dateTime = new Date().getTime();//保证订单号的唯一性
//        String total_amount = String.valueOf(order.getOrderMoney());//支付金额
//        System.out.println("支付金额:" + total_amount);
//        //1.公私钥是否是一对 2.检查公钥上传是否与私钥匹配 3.存在中文需要做urlencode 4.签名算法是否无误
//        String parkName = URLEncoder.encode(order.getParkName()+"停车支付","UTF-8");
//        String bcsfg = URLEncoder.encode("本次收费共","UTF-8");
//        String yuan = URLEncoder.encode("元","UTF-8");
//        map.put("out_trade_no", order.getOrderCode() + "_" + dateTime);//户订单号，商户网站订单系统中唯一订单号，必填
//        //map.put("total_amount", order.getOrderMoney()); //TODO 付款金额，必填
//        map.put("total_amount", "0.01");
//        map.put("subject", parkName);//订单名称，必填
//        map.put("body", bcsfg+total_amount+yuan);//商品描述，可空
//        map.put("timeout_express", "30m");// 该笔订单允许的最晚付款时间，逾期将关闭交易。取值范围：1m～15d。m-分钟，h-小时，d-天，1c-当天（1c-当天的情况下，无论交易何时创建，都在0点关闭）。 该参数数值不接受小数点， 如 1.5h，可转换为 90m。
//        map.put("notify_url", notify_all_url);
//        System.out.println("回调路径：：：" + map.get("notify_url"));
//        //设置请求参数
//        AlipayTradeWapPayRequest alipayRequest = setTradeWapPayRequest(map);
//        try {
//            //这里和普通的接口调用不同，使用的是sdkExecute
//            AlipayTradeWapPayResponse response = alipayClient.pageExecute(alipayRequest);
//            System.out.println("准备支付订单：" + response.getBody());
//            return  response.getBody();
//        }catch (Exception e){
//            e.printStackTrace();
////            return new Tip(1,"失败！");
//            return "";
//        }
//    }
//
//
//    /**
//     * @Description: App支付宝设置请求参数
//     */
//    public static AlipayTradeAppPayRequest setUpParamterForApp(Map map){
//        String notify_url = (String) map.get("notify_url");//回调函数url
//        //设置请求参数
//        AlipayTradeAppPayRequest alipayRequest = new AlipayTradeAppPayRequest();
//        alipayRequest.setNotifyUrl(notify_url);
//
//        alipayRequest.setBizContent("{\"out_trade_no\":\""+ map.get("out_trade_no") +"\","
//                + "\"total_amount\":\""+ map.get("total_amount") +"\","
//                + "\"subject\":\""+ map.get("subject") +"\","
//                + "\"body\":\""+ map.get("body") +"\","
//                + "\"timeout_express\":\""+ map.get("timeout_express") +"\","
//                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
//
//        return alipayRequest;
//    }
//    public static AlipayTradeWapPayRequest setTradeWapPayRequest(Map map){
//        AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
//        String notify_url = (String) map.get("notify_url");//回调函数url
//        request.setNotifyUrl(notify_url);
//        request.setBizContent("{\"out_trade_no\":\""+ map.get("out_trade_no") +"\","
//                + "\"total_amount\":\""+ map.get("total_amount") +"\","
//                + "\"subject\":\""+ map.get("subject") +"\","
//                + "\"body\":\""+ map.get("body") +"\","
//                + "\"timeout_express\":\""+ map.get("timeout_express") +"\","
//                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
//        return request;
//    }
//
//
//}
